home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0039 / source / manywind.def < prev    next >
Text File  |  1997-04-16  |  9KB  |  220 lines

  1. DEFINITION MODULE ManyWindows;
  2.  
  3. (*-----------------------------------------------------------------------*)
  4. (* This is the multi-window version of OneWindow.                        *)
  5. (*                                                                       *)
  6. (* This may turn into something considerably more powerful than just     *)
  7. (* a multi-window version of OneWindow. I am starting to consider the    *)
  8. (* possibility of turning this into a true window handler...             *)
  9. (*                                                                       *)
  10. (* This is still evolving, here are my thoughts on this version...       *)
  11. (*                                                                       *)
  12. (* A window is a DYNAMIC entity; it has states e.g OPEN, CLOSED, TOPPED  *)
  13. (* etc.                                                                  *)
  14. (*                                                                       *)
  15. (* It will allow up to four seperate windows to be created and           *)
  16. (* maintained by an application. Also provided are useful standard       *)
  17. (* routines for use by GEM applications.                                 *)
  18. (*                                                                       *)
  19. (*  The following routines are provided:                                 *)
  20. (*   o  Sign on the application to GEM ( and return the handle. )        *)
  21. (*   o  Get the VDI handle used by the desktop.                          *)
  22. (*   o  Open a virtual workstation for this application.                 *)
  23. (*   o  Get the current screen resolution.                               *)
  24. (*   o  Terminate an application.                                        *)
  25. (*                                                                       *)
  26. (*   Window functions:                                                   *)
  27. (*   o  Create a window ( up to four )                                   *)
  28. (*   o  Return workarea of the given window.                             *)
  29. (*   o  Open/close/delete any window                                     *)
  30. (*                                                                       *)
  31. (*                                                                       *)
  32. (*                                                                       *)
  33. (*  7/ 9/89 LGM : Original.                                              *)
  34. (*-----------------------------------------------------------------------*)
  35.  
  36. FROM Window     IMPORT ComponentSet;
  37. FROM Strings     IMPORT String;
  38. FROM SYSTEM    IMPORT LONGWORD;
  39.  
  40. TYPE
  41.     XYWHRect = RECORD    (* normally used by AES *) 
  42.           CASE :BOOLEAN OF
  43.             TRUE   : X, Y, Width, Height : CARDINAL; |
  44.             FALSE  : IntArray : ARRAY [ 0 .. 3 ] OF INTEGER;    |
  45.           END;
  46.         END;
  47.  
  48.     CornersRect = RECORD
  49.           CASE :BOOLEAN OF
  50.             TRUE :  XL, YL,    (* lower left corner *)
  51.                       XR, YR    (* upper right corner *) : CARDINAL; |
  52.             FALSE:  IntArray : ARRAY [ 0 .. 3 ] OF INTEGER;
  53.           END
  54.     END; (* actually, these can be diagonally opposite corners *)
  55.  
  56.     WindowStates = ( open, full, topped ); 
  57.         WindowSSet   = SET OF WindowStates;
  58.  
  59.         FontData = 
  60.            RECORD
  61.              CharWidth, CharHeight, Width, Height : CARDINAL;
  62.            END; (* Coordinate *)
  63.  
  64.         RectListDetail = RECORD
  65.           Set        : BOOLEAN;
  66.           First     : BOOLEAN;
  67.           UpdateRect    : XYWHRect;
  68.         END;
  69.  
  70.         SliderDetails = RECORD
  71.            Position,
  72.        Size        : [ 0 .. 1000 ];
  73.         END;
  74.  
  75.     WindowPtr = POINTER TO AWindow;
  76.  
  77.         AWindow = RECORD
  78.              Handle      : INTEGER; (* The AES window handle *)
  79.              State      : WindowSSet;
  80.              Outer,
  81.              Workarea,
  82.          PrevSize    : XYWHRect;
  83.              Components : ComponentSet;
  84.              RectList   : RectListDetail;
  85.              HorizSlider,
  86.          VertSlider : SliderDetails;
  87.              Font     : FontData;                      
  88.          Title,
  89.          Info    : String;
  90.            END; (* Window *)         
  91.  
  92.  
  93. VAR
  94.   AESApplId : INTEGER;  (* AES handle for this application *)
  95.   VDIHandle : CARDINAL; (* VDI handle of current Virtual Workstation *)
  96.   ScreenResolution : INTEGER;
  97.  
  98.  
  99.  
  100. PROCEDURE ShowAlert( text          : ARRAY OF CHAR; 
  101.               NumberOfButtons      : CARDINAL;
  102.                      DefaultButtonNumber : CARDINAL; ) : CARDINAL;
  103.     (* return button number selected *)
  104.  
  105.  
  106.  
  107. PROCEDURE StartApplication; 
  108.   (* This procedure signs on the application to AES ( GEM ) even if
  109.     you do not use any of the AES. This routine also opens a 
  110.     virtual workstation i.e. it signs you on to the VDI.
  111.  
  112.      The handle returned by AES is put in AESApplId. The handle returned
  113.     by the VDI is put in VDIHandle. DON'T mix up which handle is used when,
  114.     for AES functions you must only use the AES handle and only use the 
  115.     VDI handle with vdi functions.
  116.   *)
  117.  
  118.  
  119. PROCEDURE CreateAWindow( components : ComponentSet ) : WindowPtr;
  120.   (* It will set up the record for a window. The Maximum size will be
  121.      filled in by this procedure. The workarea size will also be set    
  122.  *)
  123.  
  124.  
  125. PROCEDURE SetAWindowTitle( window : WindowPtr; title : ARRAY OF CHAR );
  126.   (* if you have a titlebar you should set up the title before opening
  127.     the window. The title is kept in the structure.
  128.  *)
  129.  
  130. PROCEDURE SetAWindowInfo( window : WindowPtr; infoline : ARRAY OF CHAR );
  131.   (* if you have an infoline you should set it  before opening
  132.     the window. The info is kept in the Structure.
  133.  *)
  134.  
  135.  
  136. PROCEDURE OpenAWindow( window : WindowPtr );
  137. (* Will use the OuterWindow size, This can be less than the values
  138.    returned by the CreateAWindow call. If the OuterWindow size is
  139.    different from the CreateAWindow size then the Workarea co-ordinates
  140.    and size will be automatically re-calculated and updated.  *)
  141.  
  142.  
  143. PROCEDURE ClearAWindow( window : WindowPtr ) ; 
  144. (* Will clear the workarea of the window by drawing a filled rectangle
  145.    in the current fill colour. *)
  146.   
  147.  
  148. PROCEDURE CloseAWindow( window : WindowPtr );
  149.  (* Will remove window from screen -- NOTHING else will be changed.
  150.                       The window will still exist
  151.                                       with the same components and sizes. *)
  152.  
  153.  
  154. PROCEDURE DeleteAWindow( window : WindowPtr ); 
  155.     (* will destroy window -- you can now go through
  156.            the Create, set and Open window sequence. *)
  157.  
  158.  
  159. PROCEDURE TerminateApplication ; (* You must have done DeleteAWindow
  160.           ( if you have a window ) before terminating.
  161.             This used to be true but AppWindow will now automatically
  162.             close and remove the window for you
  163.  *)
  164.  
  165. (*----------------------------------------------------------------------*)
  166. (* Rectangle list procedures                                            *)
  167. (*----------------------------------------------------------------------*)
  168.  
  169. PROCEDURE SetUpdateRect( wp : WindowPtr; AreaRect : XYWHRect );
  170.  
  171. PROCEDURE ResetRectList( wp : WindowPtr );
  172.     (* next call to GetNextRect will return First Rectangle *)
  173.  
  174. PROCEDURE GetNextRect( wp : WindowPtr; 
  175.                        VAR UpdateRect : XYWHRect; ) : BOOLEAN;
  176.     (* This procedure will return the GEM rectange list for the
  177.        window. The return flag indictes that the rectangle needs
  178.        to be re-drawn. The rectangle to be updated is returned.
  179.        You call this until FALSE is returned.
  180.            In : The window you want then next rectangle for.
  181.                 You must have called SetUpdateRect first. 
  182.        Out:    UpdateRect : The intersection of the update rect 
  183.                     and the window
  184.         *) 
  185.  
  186. (*--------------------------------------------------------------------*)
  187. (* various conversion / translation utilities                         *)
  188. (*--------------------------------------------------------------------*)
  189.  
  190. PROCEDURE ToXYWHRect( In : CornersRect; VAR Out : XYWHRect );
  191.  
  192.  
  193. PROCEDURE ToCornersRect( In : XYWHRect; VAR Out : CornersRect; );
  194.  
  195.  
  196. PROCEDURE QueryIntersect(    Rect1, Rect2  : XYWHRect;
  197.                  VAR Intersect        : XYWHRect;) : BOOLEAN;
  198.  
  199.  
  200. PROCEDURE GetWindowHandle( window : WindowPtr ) : INTEGER;
  201.  
  202.  
  203. PROCEDURE GetWindowPtr( handle : INTEGER ) : WindowPtr;
  204.  
  205. (* These routines will do the call to the window lock routines, but
  206.    will keep track of how many times they have been called and and
  207.    only free the screen when the count reaches zero. *)
  208.  
  209. PROCEDURE BeginScreenUpdate;
  210.  
  211. PROCEDURE EndScreenUpdate; 
  212.  
  213.  
  214. PROCEDURE ShowMouse;
  215.  
  216. PROCEDURE HideMouse;
  217.  
  218.  
  219. END ManyWindows.